
Desktop Manager V.049

Virtual desktop switcher thingy.  

Features:

--It's small. In part thanks to UPX.

--Each virtual desktop can have it's own screenmode, colours, and wallpaper! You just use display properties as usual to do it.

--Desktop Windows get scaled to fit the screenmode instead of going fullscreen.

--Unlike some other virtual desktop programs, DM tries to compensate for   programs that want to run wild. :)

--Extendable/custimizable using modules.

Legal Crap:

Versions .049 and below of  Desktop Manager are "freeware", the archive is freely distributable and the use of the program is free for individual use.  If you wish to use this program for any other purpose you should contact me first. Use you common sense in other words, I didn't spend the time and effort on the thing for other people to make money from it. 

DM doesn't come with a warranty, express or implied, use this software at your own risk.

Use you imagination for more butt covering text. :)

Installation:

You might want to print this out and refer to it as you go along.

Unarchive contents to a folder on your hard drive, put a shortcut to the program in your startup directory.  That's it. :)

Uninstalling involves deleting the DM directory, removing any shortcuts from your startup drawer and deleting this registry key:

[HKEY_CURRENT_USER\Software\Desktop Manager]

This will eliminate all traces of the program from your machine.  You can leave this here with no ill effects, I just mention it for the purists.

Tip: you can use regedit and export this key to preserve all your settings and restore them by installing the resulting file.

Using DM as a shell:

1.	Copy Desktop.exe and Taskbar.exe from the Extras dir to the modules dir.
2.	Click on desktop.reg in the Extras dir to set the menus more appropriate for DM.
3.	Run DM, right click on the DM window or systray icon, select prefs from the popup menu, go to the advanced tab, find Run System Bits, and enable it. This makes sure things like your user startup get executed.
4.	Go to the Modules Prefs and find Taskbar.exe in the list, select it, and click on the priority option. This makes sure the taskbar is running prior to anything else so programs get the opportunity to add systray icons to it. 
5.	Use setshell in Extras to set desktop manager as the current shell. Right click on setshell and drag it to the desktop and create a shortcut to it so you can get back to explorer.
6.	Reboot.

Usage:

DM Window

You select desktops with the left mouse button.

You can drag windows around in the DM window using control and left mouse button.

If you right click on an inactive desktop, the currently selected window will move to that inactive desktop.

If you have Group windows turned off, you can get the same functionality by using Control shift to move entire applications and associated windows around, control right click to move entire applications of another window.

In normal mode (default) you drag the top left corner to resize the DM window.In normal mode (default) you drag the top left corner to resize the DM window. Double clicking the active desktop representation will iconify Dm to a default size and you wont be able to resize without double clicking again which will zoom out to the previous position. The position is always bottom right, the way God intended it to be. :)

In drag mode, using the dragbar key in the registry/prefs, the desktop control is a normal window and it's up to you to control where it goes. You have to restart DM for this to take effect. This is a perversion against nature and not recommended. :)

With Appbar mode enabled you can drag DM to the left or right of the screen. Still not recommended though. :)

Change screen modes etc using Display Properties. (IE. right click on the screen and select properties.)  Or use the mode menu in the DM popup.

Press the 'q' key to quit the program or use the popup menu. Control with the cursor keys to switch desktops with the keyboard, Control-S to make the current window sticky (persistent through all desktops), Control-U to undo it. 

Switching between desktop and dragbar mode currently requires exiting the program.

Modules:

Modules are placed in the Modules directory of wherever you keep DM installed, in fact any shortcut or executable files you put there will be run after DM loads.  If you don't want to run any modules, simply use the DM prefs option to turn it off. If you'd like to run one module and not another, simply rename the extension of the one you don't want, or delete that file.

Shortcut Manager

The shortcut module is for local shortcuts per desktop, it consists of an invisible window over the DM airspace in non Dragbar mode. (Changeable with the prefs) What you do is drag shortcuts onto it and they will be used like an appbar when you click on them, each desktop has it's own shortcuts.  if you want icons to persist throughout desktops just use program manager for them as usual or add the icons to each desktop individually. The shortcut manager works much like program manager, you can rename the icons, select multiple icons and delete them.  Some things are not implemented like dragging a file onto a folder icon on shortcut manager etc.  For some items like the "My Computer" icon, just create a shortcut to it first and drag it to the shorcut manager. 

Ram Manager

This module is pretty self explanatory, if checks the amount of free ram on a timer and if it is less than a threshold it will try to flush that much ram to free it up again.  You can also flush ram immediately.  You can use this as a stand alone program if you wish, just keep Ram Manager.exe and ramprefs.dll together.  Also keep DM.hlp in the same dir if you want the context help.

That's it, hope you get  something out of it,

Best Regards,

Byron Montgomerie <byronm@thezone.net>

Updates:

Check http://home.thezone.net/~bm/myfiles.html

History:

V .049

--NEW: Added SetShell.exe to Extras, litte utility for doing the grunt work of setting the system to use a different shell the next time you boot, works for Win9x/WinNT. It is not a boot loader, it just sets the appropriate system setting to use a paticular executable, with the path in 8.3 file format for legacy reasons.

--ALL: using heaps instead of runtime malloc for all allocations.

--DM: Fixed sticky window update bug, added StickyMode reg key, DWORD 0/1. 0 is for persistant
sticky windows across reboots, 1 is for run time only sticky windows.

--DM: Added Debug reg key for main reg tree, SM and desktop sub trees, DWORD 0/1. 
Look for DMLog.txt in DM dir. Turns on/off debug output for the respective programs.

--DM: ExceedHack streamlined, as a side effect windows are no longer hidden before dragging.

--SM/Desktop: Fixed Recycle Bin problem, blame MS for that one, QueryContextMenu seems to require specific values for high. :)

--SM/Desktop: Create a folder called "Start Menu" in the same directory and everything inside will appear in the Start menu of SM and Desktop. See archive for an example.

--SM/Desktop: added wrap code for extremely tall popup menus.

--SM/Desktop: added background thread to notify the programs when directories change. This keeps the desktop updated automatically and the start menu as well.

--SM/Desktop: Fleshed out Run dialog to keep a proper history. It inherits from the explorer RunMRU, but uses Desktop Manager\RunMRU from then on.

--SM/Desktop: Added code to update icon after executing a context menu item.

--SM/Desktop: Added code to update all non renameable icons like the Recycle Bin every 2 seconds.

--SM/Desktop: Now creates shortcuts without the "Shortcut to" prefix.

--SM/Desktop: Added OLE drag and drop support. Caveat, running DM as a shell under win95 is a problem, you have to run IE, and drag the home page shortcut a bit to initialise OLE for some reason.

--SM: Added Browse menu item.

--SM: Fixed global mode settings.

--SM: now using real shortcut files in a folder called "Shortcuts" in the same dir that the exe lives.
It creates the dir if it doesn't exist. Old shortcuts are still understood, but new ones are placed in this directory.

--DM/SM Prefs/Mod Prefs/Adv Prefs/Ram Prefs: added code to avoid redundant saving of settings with
the OK button when the Apply button is ghosted.

--SM Prefs: Added sort options, made small icons mode per desktop.

--ModPrefs: Changed from small icon to list mode for the modules, cosmetic.

--ModPrefs: Double clicking a module gives you the option to load it.

--Taskbar: added OS detection to turn off appbars automatically for win98 and winnt.

--Taskbar: added code to avoid existing system taskbar.

--DM: RunSystemBits disabled if Program Manager detected.

--Advanced Prefs facelift, added boxes for setting number of desktops.

V .048

--NEW: Module Selection prefs page, modprefs.dll in \Modules. (Two flags, enabled and priority, the first is obvious, the other means run the executable just after DM loads most of it's registry, most modules require priority to be off.)

--Added taskbar.exe to Extras folder. This is for when using DM as a shell, it gives you working appbars and systray icons. (cross fingers..) (Put it in \Modules and with the prefs select enabled and priority so the volume icon and DM's systray icons are added after taskbar is loaded)

--Fixed cosmetic refresh issue when DM is an appbar.

--Added NormalExit reg key, used with EmergencyShow to only unhide windows if DM ever crashes.

--Removed exclude region from menu popups for when explorer isn't running.

--Ram Manager: double clicking on it's systray icon now brings up it's prefs.

--DM: Middle mouse button now does the same job as control left mouse button in moving windows around.

--DM: showing/hiding DM turns it's appbarness on and off if appbarmode enabled.

--DM: fixed DM position issue when in appbar mode and changing screenmodes.

--DM: Added more code for the ExceedHack.

--DM: fixed extraneous window position settings in appbar mode.

--Fixed tooltip issue with it occasionally being behind DM's window.

--Fixed simple memory leaks in both desktop and SM.  Added MessageBox to alert me of any 
simple memory leaks in the future, as DM has had all along.

--SM: Added small icon mode, updated prefs.

--SM: Fixed rename bug added previous version.

--Added time check to SingleClickMode for Desktop and SM to avoid rapid multiples.

--General: No longer using GetCursorPos() instead using GetMessagePos() for more accurate menu popups.

--Fixed Sticky/UnSticky hotkey bug.

V .047

--Fixed minor offset bug with dragging windows around.

--Added Exceed hack (ExceedHack reg key) in advanced prefs. (Exceed users were reporting refresh problems
when windows were being hidden and shown.)

--Added EmergencyShow registry key, DWORD, 1 means show all windows that are hidden, have titles and child windows, (IE buttons and junk). (Advanced prefs)

--Added RunSystemBits reg key, DWORD.  (Adv prefs) Runs system type things when enabled for when DM is used as a shell.

--Improved WinNT support for SM's startmenu popup.

--Fixed icon colour problem with SM (and desktop).

--Added "Skins" to SM and Desktop's popup menus. Registry entries in their respective keys.

  NormalMenuTextColour --COLORREF
  SelectedMenuTextColour --COLORREF
  NormalMenuItemBitmap --Path to a BMP
  SelectedMenuItemBitmap --Path to a BMP

--Added SingleClickMode registry entries for SM and Desktop.

--Added Run menu popup to SM and Desktop.

--Misc fixes and tweaks.

V .046

--Changed the default HotKeys to fit within a N desktop theme, eash desktop can still have it's own hotkey though via the HotKey DWORD in each desktop registry.

--Fixed minor glitch with DM and SM involving transparent icon text colours.

--Added Advanced prefs page to prefs. (advprefs.dll in /Modules)

--Added more registry keys to disable more popup menu items for both DM and SM.

  Desktop Manager:
  DisableModeMenuItem

  Shortcut Manager:
  DisableStartMenuItem
  DisablePrefsMenuItem
  DisablePropertiesMenuItem

--Eliminated TransTextUsesDestop/TransTextUsesThis in favour of just setting the colour via general prefs.

--Added DesktopCols and DesktopRows registry keys, DWORDs, DM generates the key Desktops, another DWORD, for modules that need to know how many desktops there are. Hard limit of 9 total desktops, but no restrictions on organisation of those.

--Eliminated HasIconsMap in favour of a per desktop prefs setting. HasIcons keys are now used in registry subkeys 0-N, N being the number of desktops.

--Changed HOOK_PREPREFS and HOOK_POSTPREFS to indicate when the DM dialog opens and when a user hits apply or ok, respectively instead of just when DM reloads it's settings.

--Improved Desktop's/Shortcut Manager's start menu popup so that it works with more non filesystem type entries.

--Generally mucked with all the code to make sure random numbers of desktops wont crash anything.

V .045

--Added some code to address a neglected cosmetic thing to do with window icons in the DM window. 

--New prefs logos for DM courtesy of Pedro Saraiva aka "JeZ"

--Removed IconsEverywhere and IconsNowhere for A general interface based on HasIconsMap.

--Added registry keys to disable popup menu items.

  Desktop Manager:
  DisableQuitMenuItem 
  DisablePrefsMenuItem
  DisableHideMenuItem

  Shortcut Manager:
  DisableQuitMenuItem 
  DisableAboutMenuItem 

--Added DisableDMCursor registry key for no indication of what the current desktop is.

--Addressed Dragbar mode bug with different screenmodes, also fixed sizing border problem.

--Added startmenu like popup for Shortcut Manager.

--Added context menus to Shortcut Manager icons.

--Fixed a few bugs with Shortcut Manager and colours.

--Added advance hotkey, control (or whatever you use for a modifier) right cursor to advance to the next desktop.

--Added RefreshWindows registry entry, it makes each window refresh itself after you switch desktops. Default is enabled, use this key to disable it.

--Added HOOK_PREPREFS, HOOK_POSTPREFS, HOOK_CONTROLPOS to the module interface.

--Added DM_INVOKEPREFS

--Misc Prefs touch ups.

V .044

--Added following Registry keys for displaymode changing: (DWORDs)

  MinScreenWidth
  MinScreenHeight
  MinScreenDepth
  MinScreenFreq (Not active for win9x)
 
  MaxScreenWidth
  MaxScreenHeight
  MaxScreenDepth
  MaxScreenFreq (Not active for win9x)

So if you won't want modes in the mode popup larger than 1024x768, add the registry key MaxScreenWidth 1024.  This also applies to the modes that DMunderstands when switching desktops so if you want to have desktops of 1600x1200 but you set the limit to 1024, DM will not go along with it.

--Now sorting screenmodes based on depth, mostly for WinNT.

--DM is now an appbar in normal mode, this means that the work area will     not include DM. Dragbar mode precludes DM being an appbar for the   obvious reasons.

--Added Registry Key AppBarMode DWORD 0/1 to disable/enable DM as an   AppBar.

--Added Local DM window sizes, you can doubleclick the left mouse to     toggle from free to static sizing.  In free sizing mode you resize the   DM window as you please, double click brings you to a default position   where you can't resize, double click again brings you back to where   you left off.

--Added DoubleClickWidth and DoubleClickHeight registry settings (DWORD)   for the static position.

--Added Prefs option to enable/disable local DM sizing.

--Removed DM scaling option, obsolete and too much work to keep   consistant.

--Added HasIconsMap (DWORD) for customizing what icons you want on what   desktop. It's a bitmap corresponding of 1 << desktop values.  So for   icons on desktops 0 and 3 you'd set this to 0x1001 or 9.

--Added RightClickMove (DWORD) 0/1 to enable/disable that feature.

--Fixed some DM behaviour when explorer is not the shell and systray   isn't available.

--Worked around differences in GetCurrentDirectory from when you start   to boot and when you actually boot.

--Fixed some behaviour problems with Shortcut Manager when explorer is   not the shell.

--Fixed VGA mode bug.

--Ram Manager option for turning off the systray icon.

--Added Display Properties to SM menu.

--RM/SM Prefs only show up when respective modules are loaded.

--SM when started from a desktop other than 0 now works properly.

--SM when started in hidden mode now restore properly.

--SM now stays behind all other windows.

--SM prefs shows appropriate buttons when changing desktops live in   global mode.

V .043

--Smaller executable sizes!! Whoo Hoo! :)

--Ram Flushing now a module, can be used as a stand alone program.

--SM prefs speed up by not loading backdrops when transparent.

--mode menu works even when screenmodes turned off.

--Misc other things.

V. 042

--Centering the prefs window again.

--Using Help button in prefs

--Shortcut manager memory leak fixed and general code clean up. Faster.

--Added prefs for Shortcut Manager for background wallpaper etc.

--Made DM prefs extendible using standard property sheet extensions.

--Misc stupid non harmfull bug fixes.

V .041

--Misc tweaks and bug fixes.

--Changed behaviour of Ram Flushing to only flush when there is
  less physical ram than you want to allocate.  That means that
  nothing happens until the ram gets below the ram limit.

--Fixed cosmetic scaling problem with the ram prefs update.

V .040

--Fixed one liner to do with enumerating NT screenmodes.

--Added extra test in change display modes in effort to
  avoid problems in NT.

--Fixed new prefs nuissance with spinmode enabling/disabling.

V .039

--Added frequency as a consideration for screenmodes for NT..again.  
  Working blind here folks.

--Limited number of screenmodes in mode menu for WinNT types. I'm
  guessing the menu will only list the 60Hz versions of the modes.

--Add code to indicate current screen mode.

--Mucked with the prefs a bit. Make that a lot. :)

--Axed the about in the popupmenu.

V .038

--Removed bounds checking, if a window is beyond the screen dimensions DM will switch it anyway.  Minimized windows were part and parcel with this.

--Added screenmode switching to the popup menu.

V .037

--Now using UPX to compress the executables.

--Added Dragbar mode screenmode scaling.

--Decided to eliminate WindowHooks.dll, implemented similar
  functionality in main program.

--Added RegKey ScaleWindows DWORD 0/1

--Added RegKey ScaleDM DWORD 0/1

--Added RegKey ScaleMouse DWORD 0/1

--Added RegKey NoQuitPrompt DWORD 0/1

--Changed IconsEverywhere a bit, now right click brings up the
  context menu.

--Added IconsNowhere prefs option.

--Had to remove the UseMove option because things like WinAmp
  and Photoshop don't like being moved. Both use custom bits
  to keep their windows on screen all the time, too much of 
  a pain to fight with.

--Fixed bug in shortcut manager when there are no shortcuts
  starting off.

V .036

--Shortcut manager tweak to recover from a DM crash and reload.

--Programs now uses hide AND move for switching desktops. 

--Added RegKeys UseMove and UseHide, both DWORDS 1/0 for use with
  above, you turn turn one or the other or both off.  With both off
  of course you will only be changing screenmodes etc, not switching 
  between sets of windows.

--Added more sanity checking to the code. "Is it a bird? Is it a plane?
  Is it vegetable, animal, or mineral"

--Beefed up WindowsHooks.dll, it now directly stomps on windows without using DM as a go between, for whatever reason Windows was filtering out the messages to DM so it wasn't working.  The upside is that stomping is much improved. "stomping" meaning keeping windows hidden when they are on inactive desktops.  Wrote a small program to show and hide it's window on a timer and it works nicely.

V .035

--Made a few changes to be compatible with icon hiding programs.

--Changed code to avoid flickering icons on slower machines.

--Changed BootDelay to mean delay for modules, not the program window.

--Removed check in shorcut manager for duplicates.

--Added context menu to shortcut manager.

--Fixed an old bug to do with sticky windows, must have been from a 
  burn out session or something. Reg Key ShowStickyWindows should work
  properly now.

V .034

--Spin mode prefs quirk removed. No biggy.

--Misc tidying up of the source, no longer skipping messages when busy.

--Delayed transparent icon thing for display properties purposes. (Have to 
  wait for program manager to get the colour first then tell it to be 
  transparent again.)

--Fixed optimize update bug, refresh invalidation wasn't using the correct
  range after current desktop. Incomprehensible to you I know. :)

--Added Hook interface to enabled programs to be notified of DM events.

--Added Module interface along with Shortcut Manager module. A module is just an program that gets run from the Modules dir after DM is loaded, it can be either a shortcut or an executable. Shortcut Manager interfaces using hooks with DM rather nicely.

--Added transparent icon text registry keys:
  DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\TransTextUsesDesktop] 1/0
  DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\0..3\TransTextUsesThis] COLORREF

--Added DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\BootDelay] (ms)  Use it if the Shortcut manager isn't transparent on time when you boot. I use 2500.

V .033

--Fixed refresh problem when changing screenmodes from display properties when optimizerefresh is on.

--Added prefs option transparent icons for transparent icon text.

--Avoided small MS memory leak to do with using both SPIF_SENDCHANGE and SPIF_UPDATEINIFILE, now just using SPIF_UPDATEINIFILE.

--Verified MS memory leak bug in Win95 to do with SetSysColors(), either disable colours or use the ram flushing option if you experience this.  (Wrote a tiny independent program that called SetSysColors() in a loop and watched the memory drop, so I know it's not DM involved, but it could be gfx card driver related, no idea really.) Everything is fine in Win98.

--Mucked with ChangeDisplayMode() again, added error display and removed a line specifying that structure members to use. WinNT troubleshooting.

--Added prefs option spin to rotate desktops on demand. When DM is hidden no desktop rotation occurs.

V .032

--Fixed another silly bug that would lock up DM if you minimized a window. :)) Leftover continue statement that used to belong to a for(;;) now a while().  The only continue statement in the entire source. :)

--Allocating brushes (to draw solid colours) during load time instead of recreating them as needed. 

--Added version resource to WindowHooks.dll and added code to stomp on the splash screen of FreeAgent by sending it a keypress. :)

--Mucked with the screensaver a bit.

V .031

--Fixed really really really stupid cut-n-paste type bug that crashed the program if you had any sticky windows. "Easter Egg", heh :)

--Mucked with ram option to try to help out folks with no ram in their machines. :)

--Added hackers registry key "HoldTheCheck", disables hung/slow app detecting could be a bit faster. DWORD 1/0  Added "HangTime" so you can specify the timeout period in milliseconds for the test.  DWORD N (ms). 

--Added "OptimizeRefresh". DWORD 1/0 default on, It reduces cpu usage by only redrawing changed desktops. If you have a problem with the DM window refreshing turn it off by creating this key with a value of 0.

--Added registry keys for the ram flush  option, default is max physical - 24MB.  FlushRamSize DWORD (MBytes) FlushRamTime DWORD (s)

V .030

--Added Inactive Text color to the list of colours switched.

--Fixed wierd popup menu bug. When you have a popup menu active and right click on a window, DM gets a WM_RBUTTONDOWN message with a screwed up mouse position.  This would cause the right clicked window to disappear because I wasn't checking the results of my bounds checking to see it was valid, hence it would not be the active desktop but it wouldn't be an inactive desktop either.

--Fixed bug to do with screenmodes being off yet windows being scaled as if they were on. Related bug to do with screenmodes not being reset when turned back on from an off state.

--Added Tooltips to show topmost window title of inactive desktops.

--Switched from arrays to linked lists for window storage.

--Added group window option to move all an applications windows at once when enabled.  Good for photoshop, bad for Netscape.  When disabled you can also use control right click and control shift left mouse to move groups of application windows. IE. control shift to drag photoshop instead of just control to grab the parasite windows as well, or control right click to move the current application and all it's associated windows to another desktop.

--Seem to have more success with ram option. It now thoroughly frees ram every minute when enabled.  Popup on the systray now always shows current ram free.

V .029

--Added version info to the executable.

--New prefs item (and registry entry) to ignore topmost windows.

--Added simple ram purging option and display. Another Prefs option.

--Changed help file to get rid of the contents (dm.cnt file)

--Few more reports of the thing working on WinNT 4.

--Added screen saver option.

V .028

--Cancel wasn't resetting active options, fixed.

--Fixed an old bug to do with exiting the program and wallpaper settings being cloned if you exited from a desktop other than 0.

--Fixed PopupMenu bug where you couldn't get rid of the thing twice.

--Added a hide mode to the popup menu.

--Added Context help to the prefs along with a help file.

V .027

--Fixed a silly bug that didn't affect the program at all but kept sending a message as part of a failure recovery of dragging a window when it closes in mid drag.

--Dragging when in inactivemodes < 2 now works on the topmost window instead of blindly trying to detect a window that is not being displayed.

--Few more reports of the program working under WinNT 4.0

--Added a Dialog Box for preferences.

--New Registry Switches
  DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\RightClickPopup] default 1
  DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\ShowSystrayIcon] default 1


V .026

--Added a drag mode, use control left mouse button to move windows around.

--Added double buffering to avoid flicker.

--Worked on scaling windows to different screen resolutions for all windows.

--Updated text again.

V .025

--Added an icon to the program. Increased size of program by 15%. :)

--Added colour feature, now each desktop can have it's own titlebar (active, inactive and text) and background colours.

--New Registry switches
  DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\AllowScreenmodeChanges] default 1
  DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\AllowWallpaperChanges] default 1
  DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\AllowColourChanges] default 1

--Addressed flickering problem.

--Fixed inactive modes 0 and 1 not getting refreshed.  Which also fixed mode 2 since it was relying on the background updater to get refreshed.

--Added Inactivemode 3, same as 2 but adds titlebars to the windows. New default.

--Fixed silly bug responsible for extra windows popping up when a bad window is detected. Duh! :) This still doesn't excuse Outlook for unhiding itself when a screenmode change occurs, but it does mean that programs with splash screen won't pop up all windows if you switch desktops before the main window shows.
 
V .024

--Created a library to help deal with misbehaving windows, the program now gets notified when windows want to show themselves.  Replaces the quick fix of .023 which would not always work, depending on when the program got notice of a screenmode change.  Just keep the library with the executable.

--Mucked around with Optimization settings.

--Fixed the bit of text above, geesh. :)

V .023

--More Outlook Express stuff worked around, the program is now sending a SW_HIDE to all the windows it is hiding whenever the screenmode changes.  I know how a lot of folks like Outlook for some reason so I figured another quick update was in order. :) I prefer Pegasus myself. The subliminal effect of Outlook flashing in between screenmode changes on unrelated desktops is unavoidable.  

V .022

--Back to using SW_SHOWNA instead of SW_SHOWNOACTIVATE, to fix iconified window problem, original reason for switching has been superceded by the change to ChangeDisplaySettings.

--Outlook Express bug work around implemented.  Outlook express likes to activate windows in front of it when the screenmode changes and wake up when hidden and the screenmode changes. Nice. So now when I change screenmodes I hide all the appropriate windows again to avoid nasty MS hacks.

V .021

--No longer clearing the wallpaper before switching screenmodes, looks bad in win98

--No longer shortcutting a redraw during background updates, using InvalidateRgn() instead, looks odd when fullscreen applications are running.

--Changed window class syle to avoid unnecessary WM_MOVE message hitting the window.

--Added a registry switch to enable/disable whether the DM is always visible or not.  DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\AlwaysOnTop] default 1

--Fixed problem with Console Windows disappearing (DOS stuff), if a DOS app or console window is iconified if will be ignored, if it is a window it will be treated like any other window. Tricky one this was. :)

--After reinstalling windows and Visual C++ V5.0 and leaving IE 3.0 alone and not installing Netscape I haven't seen the explorer crashing bug. (Comctl32.dll bug)

V .020

--Now using GetForegroundWindow() instead of GetTopWindow() for right click and make sticky hotkey presses.

--New registry switches for leaving alone all windows of type ToolWindow or type Popup. Saves the trouble of making all of them sticky. Some custom windows like kjofol have both properties, might be better to stick with making individual windows sticky to avoid unwanted behaviour. AppBar is a PopUp but not a ToolWindow, go figure. :)  DWORD
  [HKEY_CURRENT_USER\Software\Desktop Manager\IgnoreToolWindows]
  [HKEY_CURRENT_USER\Software\Desktop Manager\IgnorePopupWindows]

--No longer using CDS_FULLSCREEN for ChangeDisplaySettings(), applications not under the programs perview will get the appropriate window notification so they can resize or move themselves. Was using CDS_FULLSCREEN for an earlier revision to try and avoid windows resizing themselves to fullscreen size, since I am caching window postitions it isn't relevant.

--New registry entry for the hotkey modifier. DWORD
 [HKEY_CURRENT_USER\Software\Desktop Manager\HotkeyModifier]
 
V .019

--New registry switch to leave iconified windows alone. DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\IgnoreIconified] So if you iconify a window (move it to the taskbar in most instances), it will remain in the taskbar as you change desktops. Default is off.

--Now checking for valid window coordinates returned from GetWindowRect, just in case.

--Fixed Iconified Window problem.

V .018

--Fixed minor Dragbar mode bug to do with reloading settings. (Rerunning the program reloads the settings). Dragbar mode can't be enabled that way though you can disable it that way. (Quirk of Windows)

--Fixed stupid GetMessage bug that has been there since the beginning. Probably responsible for crashing explorer.

V .017

--Fixed initialisation problems when the registry was empty. Screenmodes should now work properly from a fresh start. Went back to using the ouput of EnumDisplaySettings so WinNT might have more of a chance of working as well.  (Garbage in, Garbage out)

--Fixed bug with iconseverywhere disenabled, if you exit from anywhere but desktop 0, the icons will reappear.

V .016

--rewrote a lot of code to avoid redundancy. Only calling EnumWindows() once when changing desktops, etc.

--Just to be extra sure, I am calling ShowWindowAsync() on windows that seem to be hung in my custom ShowWindow() routine.

--Fixed right click issue with sticky windows skipping to the next non sticky windows, not it just stops if the current window is sticky.

--Now scalling windows before exit for the sake of neatness.

--Dialogs no longer get scaled, just moved.

V .015

--Finally settled on an appropriate ShowWindow flag, SW_SHOWNOACTIVATE.

--Now unhiding winodows in reverse order to hiding them.

--Now displaying sticky windows in inactive mode 2, also sticky windows now get scaled and moved to fit new screen resolutions just like right click windows.

--Added a ShowStickyWindows option for inactive mode 2, new default, 1 means show sticky windows, 0 means ignore them. DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\ShowStickyWindows]

--Fixed bug loading 4 byte registry DWORDS into BOOLS, ARGH!

--Reduced program priority back to nromal. Faster.

V .014

--Set Window Class to have no background for less flickering.  (The window is no longer erased first by Windows)

--Fixed wallpaper changes not being saved unless you switched desktops.

--Fixed updating in inactive mode 2 when no wallpaper is present.

--Fixed a cosmetic window order problem with right clicked windows.

--Added a BlinkMode option for inactive mode 2, alternates the current desktop background fill. DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\BlinkMode]

V .013

--Fixed ChangeDisplayMode bug for win95. It now defaults to previous behaviour of just changing resolutions. Win98 depth changing is unaffected. Also added code to placate WinNT's frequency requirements, but still can't test it.

--Added code to avoid disappearing windows.

--Added a semaphore to avoid background updating ocurring while already running other code.

V .012

--Added check for windows that show themselves for inactive desktops.

--Added checks for divide by zero.

--Now allowing bitdepth screenmode changes, works for me in win98 but not win95.

V .011

--More bug fixes, related to screenmodes and dragbar mode.

--Now using the class of the window instead of the name for sticky windows.

V .010

--Quick bug fix, now loads in wallpaper/screenmode of desktop 0 instead of leaving it at whatever was the last selected.

--Wallpaper thumbs stored at a higher res.

V .009

--Fixed odd bug to do with changing screenmodes not updating the wallpaper because SPIF_UPDATEINIFILE wasn't used. Changing desktops of the same res remains the same for faster switching.

--Now clearing old Hotkey settings before setting new ones for DM_NEWREGSETTINGS

--Added another inactive mode (2), new default, shows windows as little squares.

--Sped up wallpaper thumbs.

V .008

--Fixed bug to do with ShowWindowAsync(), namely, I am no longer using the thing, now using a custom function instead. Windows should stay put now when you go nuts changing desktops as fast as you can with the hotkeys. :)

--Fixed bug in code detecting whether the same wallpaper was in use between Desktops. Changing desktops too quickly crashes explorer when you use different wallpaper, setting them all the same will avoid this. No idea why this happens.

-- Eliminated TranslateMessage() from window loop.

--Added Hot -n- Sticky feature.  Press control-F5 to add the current window to a list of windows that should stick around. Control-F6 unsticks the window.  Sticky windows are remembered in the registry. Override hotkeys with virtual key code stored here: DWORD
  [HKEY_CURRENT_USER\Software\Desktop Manager\StickyHotkey]
  [HKEY_CURRENT_USER\Software\Desktop Manager\UnstickyHotkey]

V .007
--Good news is that some folks have managed to get the thing to work with WinNT 4.

--Fixed a bunch of bugs, taskbar sensitivity was arsed up, window was resizing inappropriately, obscure bug to do with hidden windows closing leaving cached window sizes in an odd state, added less optimistic code to get the top window when you right click.
  
--Added InactiveMode to the registry, 0 means no backdrops in inactive desktops, defaults to 1, which shows thumbs of the backdrops. DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\InactiveMode]

--Added HotKeys, control F1-F4 Can be overrided by use of the registry key HotKey in each of the desktop sections. Virtual key code. DWORD [HKEY_CURRENT_USER\Software\Desktop Manager\0\HotKey]

--Added IconsEverywhere registry key, 0 means icons will only show up in desktop 0, defaults to 1. DWORD
 [HKEY_CURRENT_USER\Software\Desktop Manager\IconsEverywhere]

--Added interface API. See header file for details.

V .006

--Now saves current width and height, also position for dragbar mode.
--Wallpaper now reflected in inactive desktops, few cosmetic changes, more to come.
--Updates inactive desktops when apps/windows close behind the scenes.

V .005

--Now ignoring bitdepth to avoid the ChangeDisplaySettings() bug. This means if you change your screenmode to a different depth, that will be the new depth for all the desktops.

--Now saves settings in registry [HKEY_CURRENT_USER\Software\Desktop Manager]
--added separate wallpaper tiling for each desktop.

V .004

--Added scaling code to right click functionality to avoid a problem.
--Added window position caching to avoid applications getting settings change messages.

V .003

--Added Quit prompt and you now have to press 'q' to quit the program.
--Wallpaper per desktop feature added.
--Added /dragbar switch
--Compressed executable with ASPack, it's down to 12KB now?!? Wow! :)

V .002

--Moved the cursor back near the window after a desktop change in the case of different screen resolutions.
--Fixed minor bug with right click, didn't check for failure of hide, which happens when you open a folder and the system halts waiting for a device.

V .001

Out the door

